package com.eastfair.venuebooking.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.eastfair.boot.request.PageParams;
import com.eastfair.boot.service.SuperService;
import com.eastfair.venuebooking.dto.VenueBookAuditDTO;
import com.eastfair.venuebooking.entity.VenueBookAudit;
import com.eastfair.venuebooking.vo.VenueBookAuditVO;

import java.util.List;

/**
 * <p>
 * 业务接口
 * 场馆预定审核表
 * </p>
 *
 * @author dqq
 * @date 2023-02-22
 */
public interface VenueBookAuditService extends SuperService<VenueBookAudit> {

    /**
     * 查询场馆预定审核VO.
     *
     * @param pageParams the page params
     * @return the page
     */
    Page<VenueBookAuditVO> listVenueBookAuditVO(PageParams<VenueBookAuditDTO> pageParams);

    /**
     * id 查询详情.
     *
     * @param id the id
     * @return the venue book audit vo by id
     */
    VenueBookAuditVO getVenueBookAuditVOById(Long id);

    /**
     * 查询场馆预定列表.
     *
     * @param venueBookAuditDTO the venue book audit dto
     * @return the list
     */
    List<VenueBookAudit> listVenueBookAudit(VenueBookAuditDTO venueBookAuditDTO);

    /**
     * 外部系统ID查询场馆预定申请.
     *
     * @param externalExhibitionId the external exhibition id
     * @return the by external exhibition id
     */
    VenueBookAudit getByExternalExhibitionId(String externalExhibitionId);

    /**
     * 展会名称查询场馆预定申请.
     *
     * @param exhibitionName the exhibition name
     * @return the by exhibition name
     */
    VenueBookAudit getByExhibitionName(String exhibitionName);

    /**
     * 展会编号查询场地预定申请.
     *
     * @param exhibitionNo the exhibition no
     * @return the by exhibition no
     */
    VenueBookAudit getByExhibitionNo(String exhibitionNo);

    /**
     * 场馆官网保存场馆预定审核.
     *
     * @param venueBookAuditDTO the venue book audit dto
     * @return the boolean
     */
    boolean saveForVenueWebSite(VenueBookAuditDTO venueBookAuditDTO);

    /**
     * 外部展览会议系统保存场馆预定申请.
     *
     * @param venueBookAuditDTO the venue book audit dto
     * @return the boolean
     */
    boolean saveForConfluence(VenueBookAuditDTO venueBookAuditDTO);

    /**
     * 保存场馆预定申请.
     *
     * @param venueBookAuditDTO the venue book audit dto
     * @return the boolean
     */
    boolean saveVenueBookAudit(VenueBookAuditDTO venueBookAuditDTO);

    /**
     * 修改场馆预定审核.
     *
     * @param venueBookAuditDTO the venue book audit dto
     * @return the boolean
     */
    boolean updateVenueBookAudit(VenueBookAuditDTO venueBookAuditDTO);

    /**
     * 更新审核结果.
     *
     * @param venueBookAuditDTO the venue book audit dto
     * @return the boolean
     */
    boolean updateAuditStatus(VenueBookAuditDTO venueBookAuditDTO) throws Exception;

    /**
     * 生成展会，商机，客户，联系人信息.
     *
     * @param venueBookAudit the venue book audit dto
     * @throws Exception the exception
     */
    void saveExhibitionInfo(VenueBookAudit venueBookAudit) throws Exception;

    /**
     * 尝试创建生成展会，商机，客户，联系人信息.
     *
     * @param venueBookAudit the venue book audit
     */
    void trySaveExhibitionInfo(VenueBookAudit venueBookAudit);

    /**
     * 尝试创建生成展会，商机，客户，联系人信息.
     *
     * @param venueBookAuditDTO the venue book audit dto
     */
    void trySaveExhibitionInfo(VenueBookAuditDTO venueBookAuditDTO);

    /**
     * 发送审核结果短信提醒.
     *
     * @param venueBookAudit the venue book audit
     * @return the boolean
     */
    boolean sendAuditSmsMsg(VenueBookAudit venueBookAudit);

    /**
     * 异步发送审核结果短信提醒.
     *
     * @param venueBookAudit the venue book audit
     */
    void asyncSendAuditSmsMsg(VenueBookAudit venueBookAudit);
}
